﻿#define _CRT_SECURE_NO_WARNINGS 1


//#include<iostream>
//
//using namespace std;
//
//void swap(int& a, int& b)
//{
//	int temp = a;
//	a = b;
//	b = temp;
//}
//
//void swap(double& a, double& b)
//{
//	double temp = a;
//	a = b;
//	b = temp;
//}
//
//void swap(char& a, char& b)
//{
//	char temp = a;
//	a = b;
//	b = temp;
//}


//#include<iostream>
//
//using namespace std;
//
//template<typename T>
//void swap(T& a, T& b)
//{
//	T temp = a;
//	a = b;
//	b = temp;
//}


//#include<iostream>
//
//using namespace std;
//
//template<class T>
//T Add(const T& a, const T& b)
//{
//	return a + b;
//}
//
//int main()
//{
//	int a1 = 3, a2 = 4;
//	cout << Add(a1, a2) << endl;
//	double b1 = 3.0, b2 = 4.0;
//	cout << Add(b1, b2) << endl;
//
//	// 该语句不能编译，因为类型不一致
//	// 有两种方法可以解决
//	// 1. 用户自己来强制转换
//	// 2. 使用显式实例化
//	//cout << Add(a1, b2) << endl;
//	cout << Add(a1, (int)b2) << endl;
//	cout << Add<int>(a1, b2) << endl;
//		
//	return 0;
//}


//#include<string>
//#include<iostream>
//
//using namespace std;
//
//int main()
//{
//    string s;
//    cin >> s;
//    int size = s.size(), sum = 0;
//    for (int i = 0, j = 1; i < size - 1; i++)
//    {
//        if (s[i] >= '0' && s[i] <= '9')
//        {
//            int x = s[i] - '0';
//            sum += x * j++;
//        }
//    }
//    if (sum % 11 == s[size - 1] - '0')
//    {
//        cout << "Right" << endl;
//    }
//    else
//    {
//        s[size - 1] = (sum % 11) + '0';
//        cout << s << endl;
//    }
//
//    return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//int Add(int a, int b)
//{
//	return a + b;
//}
//
//template<class T>
//T Add(T a, T b)
//{
//	return a + b;
//}
//
//int main()
//{
//	// 调用第一个
//	cout << Add(3, 4) << endl;
//	// 调用第二个
//	cout << Add<int>(3, 4) << endl;
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//int Add(int a, int b)
//{
//	cout << "int Add(int a, int b)" << endl;
//	return a + b;
//}
//
//template<class T1, class T2>
//T1 Add(T1 a, T2 b)
//{
//	cout << "T1 Add(T1 a, T2 b)" << endl;
//	return a + b;
//}
//
//int main()
//{
//	cout << Add(3, 4) << endl;
//	cout << Add(3, 4.0) << endl;
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//template<class T, size_t N = 10>
//class Date
//{
//
//};


//#include<iostream>
//
//using namespace std;
//
//class Date
//{
//public:
//	Date(int year, int month, int day)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{ }
//
//	bool operator<(const Date& d)
//	{
//		if (_year < d._year)
//		{
//			return true;
//		}
//		else if (_year == d._year && _month < d._month)
//		{
//			return true;
//		}
//		else if (_year == d._year && _month == d._month)
//		{
//			return _day < d._day;
//		}
//		return false;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//template<class T>
//bool Less(T a, T b)
//{
//	return a < b;
//}
//
//template<>
//bool Less<Date*>(Date* a, Date* b)
//{
//	return *a < *b;
//}
//
//int main()
//{
//	cout << Less(3, 4) << endl;// 可以比较，结果正确
//	Date d1(2025, 5, 7);
//	Date d2(2025, 5, 8);
//
//	Date* p1 = new Date(2025, 5, 7);
//	Date* p2 = new Date(2025, 5, 8);
//	cout << Less(d1, d2) << endl;// 可以比较，结果正确
//	cout << Less(p1, p2) << endl;// 可以比较，结果错误，结果在变化
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//template<class T1, class T2>
//class Data
//{
//public:
//	Data()
//	{
//		cout << "Date<T1, T2>" << endl;
//	}
//
//private:
//	T1 _d1;
//	T2 _d2;
//};
//
//template<>
//class Data<int, char>
//{
//public:
//	Data()
//	{
//		cout << "Date<int, char>" << endl;
//	}
//
//private:
//	int _d1;
//	char _d2;
//};
//
//
//int main()
//{
//	Data<int, int> d1;
//	Data<int, char> d2;
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//template<class T1, class T2>
//class Data
//{
//public:
//	Data()
//	{
//		cout << "Data<T1, T2>" << endl;
//	}
//
//private:
//	T1 _d1;
//	T2 _d2;
//};
//
//template<class T1>
//class Data<T1, int>
//{
//public:
//	Data()
//	{
//		cout << "Data<T1, int>" << endl;
//	}
//
//private:
//	T1 _d1;
//	int _d2;
//};
//
//template<class T1, class T2>
//class Data<T1*, T2*>
//{
//public:
//	Data()
//	{
//		cout << "Data<T1*, T2*>" << endl;
//	}
//
//private:
//	T1 _d1;
//	T2 _d2;
//};
//
//template<class T1, class T2>
//class Data<T1&, T2&>
//{
//public:
//	Data(const T1& d1, const T2& d2)
//		:_d1(d1)
//		,_d2(d2)
//	{
//		cout << "Data<T1&, T2&>" << endl;
//	}
//
//private:
//	const T1& _d1;
//	const T2& _d2;
//};
//
//
//int main()
//{
//	Data<int, double> d1;// 调用第一个
//	Data<double, int> d2;// 调用第二个
//	Data<int*, int*> d3;// 调用第三个
//	Data<int&, int&> d4(3, 4);// 调用第四个
//
//	return 0;
//}


//#include<string>
//#include<iostream>
//
//using namespace std;
//
//class Student
//{
//public:
//	void identity()
//	{
//
//	}
//
//	void study()
//	{
//
//	}
//
//protected:
//	string _name = "张三";
//	string _address;
//	string _tel;
//	int age = 18;
//
//	int _id;
//};
//
//class Teacher
//{
//public:
//	void identity()
//	{
//
//	}
//
//	void teaching()
//	{
//
//	}
//
//protected:
//	string _name = "李四";
//	string _address;
//	string _tel;
//	int age = 38;
//
//	int _title;
//};
//
//int main()
//{
//
//	
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//class Person
//{
//public:
//	void identity()
//	{
//		cout << "void identity()" << endl;
//	}
//
//protected:
//	string _name;
//	string _address;
//	string _tel;
//	int _age;
//};
//
//class Student : public Person
//{
//public:
//	void study()
//	{
//		cout << "void study()" << endl;
//	}
//
//protected:
//	int _id;
//};
//
//class Teacher : public Person
//{
//public:
//	void teaching()
//	{
//		cout << "void teaching()" << endl;
//	}
//
//protected:
//	string _title;
//};
//
//int main()
//{
//	Student s;
//	Teacher t;
//
//	s.identity();
//	t.identity();
//
//	return 0;
//}


//#include<iostream>
//
//using namespace std;
//
//class Person
//{
//protected:
//	string _name;
//	string _sex;
//	int _age;
//};
//
//class Student : public Person
//{
//public:
//	int _No;
//};
//
//int main()
//{
//	Student s;
//	// 1. 派⽣类对象可以赋值给基类的指针/引⽤
//	Person* ps = &s;
//	Person& rs = s;
//	
//	// 2. 基类对象不能赋值给派⽣类对象，这⾥会编译报错
//	Person p;
//	//s = p;
//
//	return 0;
//}


#include<iostream>

using namespace std;

class Person
{
protected:
	string _name = "张三";
	int _id = 123;// 身份证号
};

class Student : public Person
{
public:
	void Print()
	{
		cout << "姓名：" << _name << endl;
		cout << "身份证号：" << Person::_id << endl;
		cout << "学号：" << _id << endl;
	}

protected:
	int _id = 999;// 学号
};

int main()
{
	Student s;
	s.Print();

	return 0;
}